﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SIGCBI.Entities;
using SIGCBI.Repository;
using Microsoft.Practices.Unity;

namespace SIGCBI.BusinessLogic
{
    public interface IGuiaEntradaBL
    {
        List<GUIA_ENTRADA> GetAllFromGuiaEntrada();
        List<GUIA_ENTRADA> GetFromGuiaEntradaByCriterioAndAreaAndFecha(string proveedor, string nroDoc, string area, DateTime? fec1, DateTime? fec2);

        GUIA_ENTRADA GetFromGuiaEntradaById(Int32 id);

        void AddGuiaEntrada(GUIA_ENTRADA guiaEntrada);
        void UpdateGuiaEntrada(GUIA_ENTRADA guiaEntrada);
    }

    class GuiaEntradaBL : IGuiaEntradaBL
    {
        [Dependency]
        public IProductoRepository productoRepository { get; set; }
        
        [Dependency]
        public IUnidadMedidaRepository undMedidaRepository { get; set; }

        [Dependency]
        public IDetalleGuiaEntradaRepository detalleGuiaRepository { get; set; }

        [Dependency]
        public IGuiaEntradaRepository guiaEntradaRepository { get; set; }

        public List<GUIA_ENTRADA> GetAllFromGuiaEntrada()
        {
            return guiaEntradaRepository.GetAllFromGuiaEntrada();
        }

        public List<GUIA_ENTRADA> GetFromGuiaEntradaByCriterioAndAreaAndFecha(string proveedor, string nroDoc, string area, DateTime? fec1, DateTime? fec2)
        {
            return guiaEntradaRepository.GetFromGuiaEntradaByCriterioAndAreaAndFecha(proveedor, nroDoc, area, fec1, fec2);
        }

        public GUIA_ENTRADA GetFromGuiaEntradaById(int id)
        {
            return guiaEntradaRepository.GetFromGuiaEntradaById(id);
        }

        public void AddGuiaEntrada(GUIA_ENTRADA guiaEntrada)
        {
            var msg = "";
            var ok = guiaEntrada.Validate(out msg);

            if (ok)
            {
                guiaEntradaRepository.AddGuiaEntrada(guiaEntrada);

                //#region UpdateStock
                //foreach (var item in guiaEntrada.DETALLE_GUIA_ENTRADA)
                //{
                //    var producto = productoRepository.GetFromProductoById(item.IdProducto);
                //    var foto = new FOTO_PRODUCTO(); //= fotoTrabajadorRepository.GetFotoTrabajadorByIdTrabajador(pecosa.IdSolicitante);
                //    var undMedida = undMedidaRepository.GetFromUnidadMedidaById(producto.IdUnidadMedida);

                //    var actproducto = producto;
                //    actproducto.FOTO_PRODUCTO = foto;
                //    actproducto.UNIDAD_MEDIDA = undMedida;

                //    actproducto.Stock = producto.Stock + item.Cantidad;
                //    productoRepository.UpdateProducto(actproducto);
                //}
                //#endregion

            }
            else
            {
                throw new Exception(msg);
            } 
        }

        public void UpdateGuiaEntrada(GUIA_ENTRADA guiaEntrada)
        {
            var msg = "";
            var ok = guiaEntrada.Validate(out msg);

            if (ok)
            {
                //#region UpdateStock
                //foreach (var item in guiaEntrada.DETALLE_GUIA_ENTRADA)
                //{
                //    var existeDetal = detalleGuiaRepository.GetFromDetalleGuiaByProductoIdAndGuiaId(item.IdProducto, guiaEntrada.ID);

                //    if (existeDetal != null)//modificado
                //    {
                //        if (item.Cantidad != existeDetal.Cantidad)
                //        {
                //            var producto = productoRepository.GetFromProductoById(item.IdProducto);
                //            var foto = new FOTO_PRODUCTO(); //= fotoTrabajadorRepository.GetFotoTrabajadorByIdTrabajador(pecosa.IdSolicitante);
                //            var undMedida = undMedidaRepository.GetFromUnidadMedidaById(producto.IdUnidadMedida);

                //            var actproducto = producto;
                //            actproducto.FOTO_PRODUCTO = foto;
                //            actproducto.UNIDAD_MEDIDA = undMedida;

                //            actproducto.Stock = producto.Stock - existeDetal.Cantidad + item.Cantidad;
                //            productoRepository.UpdateProducto(actproducto);
                //        }
                //    }
                //    else//nuevo
                //    {
                //        var producto = productoRepository.GetFromProductoById(item.IdProducto);
                //        var foto = new FOTO_PRODUCTO(); //= fotoTrabajadorRepository.GetFotoTrabajadorByIdTrabajador(pecosa.IdSolicitante);
                //        var undMedida = undMedidaRepository.GetFromUnidadMedidaById(producto.IdUnidadMedida);

                //        var actproducto = producto;
                //        actproducto.FOTO_PRODUCTO = foto;
                //        actproducto.UNIDAD_MEDIDA = undMedida;

                //        actproducto.Stock = producto.Stock + item.Cantidad;
                //        productoRepository.UpdateProducto(actproducto);
                //    }
                //}
                //#endregion

                guiaEntradaRepository.UpdateGuiaEntrada(guiaEntrada);
            }
            else
            {
                throw new Exception(msg);
            } 
        }



    }
}




